Apache virtualhost setting for web-sockets

Environment
  1. A records in DNS manager

    | Type | Name | Value |

    | A | blog | your_server_ip |

    | A | math | your_server_ip |

  2. Set up apache2 with this https://certbot.eff.org/

  3. Add necessary module

a2enmod proxy proxy_http proxy_wstunnel proxy_balancer lbmethod_byrequests

systemctl restart apache2
HTML Codes
        var ws_link = 'ws://' + location.hostname + "/ws/";

        if (window.location.protocol === 'https:') {
            ws_link = 'wss://' + location.hostname + "/wss/";
        }

        var ws = new WebSocket(ws_link);
Apache Codes (at /etc/apache2/sites-available/000-default.conf)
<VirtualHost *:80>
        ServerName blog.yingshaoxo.xyz

        ProxyRequests Off
        ProxyPreserveHost On

        ProxyPass        "/" "http://127.0.0.1:2018/"
        ProxyPassReverse "/" "http://127.0.0.1:2018/"
</VirtualHost>

<VirtualHost *:80>
        ServerName math.yingshaoxo.xyz

        ProxyRequests Off
        ProxyPreserveHost On

        ProxyPass "/ws/" "ws://127.0.0.1:5277/"
        ProxyPassReverse "/ws/" "ws://127.0.0.1:5277/"

        ProxyPass "/wss/" "ws://127.0.0.1:5277/"
        ProxyPassReverse "/wss/" "ws://127.0.0.1:5277/"

        ProxyPass        "/" "http://127.0.0.1:5000/"
        ProxyPassReverse "/" "http://127.0.0.1:5000/"
</VirtualHost>
Finnaly
systemctl restart apache2

By the way, if you only need one page frome others, this will be fine

<VirtualHost *:80>
        ServerName net.yingshaoxo.xyz

        SSLProxyEngine on

        ProxyPass        "/" "https://www.baidu.com"
        ProxyPassReverse "/" "https://www.baidu.com"

        ErrorLog /etc/apache2/sites-available/error.log
</VirtualHost>